/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jeffoldwork;

import java.util.zip.*;
import java.io.*;
import java.util.Enumeration;

public class Unzip {
    public static void unzip(String zipFile) throws ZipException,
            IOException {

        //System.out.println(zipFile);
        int BUFFER = 2048;
        File file = new File(zipFile);

        ZipFile zip = new ZipFile(file);
        String newPath = zipFile.substring(0, zipFile.length() - 4);

        new File(newPath).mkdir();
        Enumeration zipFileEntries = zip.entries();

        // Process each entry
        while (zipFileEntries.hasMoreElements()) {
            // grab a zip file entry
            ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();

            String currentEntry = entry.getName();

            File destFile = new File(newPath, currentEntry);
            destFile = new File(newPath, destFile.getName());
            File destinationParent = destFile.getParentFile();
            
            // create the parent directory structure if needed
            File makeDir = new File(destinationParent +"\\" +currentEntry.replace('/', '\\')) ;

            if(makeDir.getAbsolutePath().charAt(makeDir.getAbsolutePath().length() - 4) != '.')
                makeDir.mkdirs();

            if (!entry.isDirectory()) {
                BufferedInputStream is = new BufferedInputStream(zip.getInputStream(entry));
                int currentByte;
                // establish buffer for writing file
                byte data[] = new byte[BUFFER];

                // write the current file to disk
                FileOutputStream fos = new FileOutputStream(makeDir);
                BufferedOutputStream dest = new BufferedOutputStream(fos,
                        BUFFER);

                // read and write until last byte is encountered
                while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
                    dest.write(data, 0, currentByte);
                }
                dest.flush();
                dest.close();
                is.close();
            }
            if (currentEntry.endsWith(".zip")) {
                // found a zip file, try to open
                unzip(makeDir.getAbsolutePath());
            }
        }
    }
}

